/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package appfinal;

import java.util.ArrayList;

/**
 *
 * @author Hugo Cornejo
 */
public class AdmVenta {
    private ArrayList<Venta> ventas;
    private ArrayList<Compra> compras;
    
    public AdmVenta() {
        ventas=new ArrayList<Venta>();
        compras=new ArrayList<Compra>();
    }
        
    public void registrarTransaccion(String concepto,String numero,String empresa,String fechaemision,double subtotal,double igv,double total,String moneda,String fechavencimiento,String fechapago,String observaciones,String flag) 
            throws BusinessException 
    {
       validarDatos(numero, concepto, fechaemision, fechavencimiento, subtotal, igv, total, moneda, flag);
       
        String estado="Nueva";
    
        if (flag=="venta"){
            // Crear un nueva Venta
            Venta nuevaVenta = new Venta(concepto, numero, fechaemision, empresa, subtotal, igv, total, moneda, fechavencimiento, fechapago, observaciones,estado);
            // Poner como  parte de la coleccion
            ventas.add(nuevaVenta);
        }else{
            // Crear un nueva Compra
            Compra nuevaCompra = new Compra(concepto, numero, fechaemision, empresa, subtotal, igv, total, moneda, fechavencimiento, fechapago, observaciones,estado);
            // Poner como  parte de la coleccion
            compras.add(nuevaCompra);
        }
        
    }
    
    public Venta buscarVenta(String numero) {
        
        for(Venta venta : ventas)
            if (venta.getNumero().equals(numero))
                return venta;
        
            return null;
    }
    
    public Compra buscarCompra(String numero) {
        
        for(Compra compra : compras)
            if (compra.getNumero().equals(numero))
                return compra;
        
            return null;
    }
    
    public void eliminarTransaccion(String numero,String flag) {
        
        if(flag=="venta"){
            Venta venta = buscarVenta(numero);
            if (venta != null)
                ventas.remove(venta);
        }else{
            Compra compra = buscarCompra(numero);
            if (compra != null)
                ventas.remove(compra);
        
        }
    }
    
    private void validarDatos(String numero,String concepto,String fechaemision,String fechavencimiento,double subtotal,double igv,double total,String moneda,String flag)
            throws BusinessException 
    {
        validarMandatorios(numero,concepto,fechaemision,fechavencimiento,subtotal,igv,total,moneda);
        validarDuplicidad(numero,flag);
    }
    
    private void validarDuplicidad(String numero, String flag) 
            throws BusinessException 
        {
                        
            if(flag=="venta"){
                if (buscarVenta(numero) != null){
                    String mensaje = "Error : " + numero + " ya existe";
                    // Crear la excepcion y lanzarla
                    throw new BusinessException(mensaje);
                }
            }else{
                if (buscarCompra(numero) != null ){
                String mensaje = "Error : " + numero + " ya existe";
                // Crear la excepcion y lanzarla
                throw new BusinessException(mensaje);
                }

            }
        
        }
        
     private void validarMandatorios(String numero,String concepto,String fechaemision,String fechavencimiento,double subtotal,double igv,double total,String moneda)
            throws BusinessException 
        {
        String mensaje = "";
        if (numero == null || numero.isEmpty())
            mensaje += "numero no puede ser vacio o nulo";
        if (concepto == null || concepto.isEmpty())
            mensaje += "\nConcepto no puede ser vacio o nulo";
        if (fechaemision == null || fechaemision.isEmpty())
            mensaje += "\nFecha de emision  no puede ser vacio o nulo";
        if (fechavencimiento == null || fechavencimiento.isEmpty())
            mensaje += "\nFecha de vencimiento no puede ser vacio o nulo";
        if (subtotal<=0.00)
            mensaje += "\nSubTotal no puede ser negativo o cero";
        if (igv<=0.00)
            mensaje += "\nIGV no puede ser negativo o cero";
        if (total<=0.00)
            mensaje += "\nTotal no puede ser negativo o cero";
        if (moneda == null || moneda.isEmpty())
            mensaje += "\nMoneda no puede ser vacio o nulo";
        if (! mensaje.isEmpty())
            throw new BusinessException(mensaje);       
    }
}
